import os
from functools import reduce
import logging


def set_abspath(path:str) -> str:
    '''函数式计算绝对路径
    Args:
        path (str): 相对路径
    Returns:
        abspath (str): 绝对路径
    '''
    abspath = os.path.abspath(path)
    print(f'abspath: {abspath}')
    return abspath

# 因为解释器的工作目录是VScode的打开文件目录，所以需要手动设置工作目录
def set_interface_path(abspath:str) -> str:
    '''切换到该工作目录
    '''
    try:
        # 解释器的工作路径
        os.chdir(abspath)# 解释器的工作路径
        print(f'abspath: {abspath}')
        # logger.info('set_interface_path函数返回了',format(r'{abspath}',abspath=abspath))
    except:
        print('解释器的工作目录好像没有接受到')

# 管道风格函数组合
def pipe(*funcs):
    return reduce(lambda f, g: lambda x: g(f(x)), funcs)

# ************************************
import tkinter as tk
from tkinter import simpledialog

# 创建主窗口（可隐藏）
root = tk.Tk()
root.withdraw()  # 隐藏主窗口，只显示对话框

# 弹出输入对话框
ab_path = simpledialog.askstring(
    title="请输入工作路径",
    prompt="请输入想要工作的路径：",
    parent=root  # 关联主窗口（可选）
)

# 处理输入结果
if ab_path:
    print(f"您已出入路径，{ab_path}！!")
else:
    print("您取消了输入")
# *************************************


# 函数式计算工作目录
piped = pipe(set_abspath, set_interface_path)
piped(ab_path)


# 将工作目录添加到模块搜索路径
import sys
abspath = set_abspath(ab_path)
sys.path.append(abspath) 

handler_path = os.path.join(abspath.split('\\')[0],abspath.split('\\')[1]+'.log')
# 日志工作模板

logger = logging.getLogger('multiregrassion')
logger.setLevel(logging.INFO)
addHandler = logging.FileHandler(handler_path)
formatter = logging.Formatter('%(asctime)s --- %(name)s --- %(levelname)s --- %(message)s')
addHandler.setFormatter(formatter)
logger.addHandler(addHandler)
logger.info('What I want to log?????')
logger.info('Log ending')
